2024.3.1 数値実験の記録をフォルダに保存する
code:繰り返し計算の記録.py
import numpy as np
import datetime, os, shutil
# 実行結果をファイルに保存するクラス
class Record:
# コンストラクタ
def __init__(self):
dirname = 'result' + self.get_datetime() # フォルダ
filename_config = dirname + '/config.md' # 環境
filename_progress = dirname + '/progress.md' # 経過
filename_result = dirname + '/result.md' # 結果
# 同じ分内に実行したときのフォルダ名の衝突を避ける
count = 0
for olddirname in os.listdir():
if olddirname.startswith(dirname):
count = count + 1 # 重複数をカウント
if count != 0: # 前回フォルダの末尾に重複数を付加
os.rename(dirname, dirname + 'bak' + str(count))
os.mkdir(dirname) # 今回フォルダ
self.fp_config = open(filename_config, 'w')
self.fp_progress = open(filename_progress, 'w')
self.fp_result = open(filename_result, 'w')
# デストラクタ
def __del__(self):
self.fp_config.close()
self.fp_progress.close()
self.fp_result.close()
# 経過の記録を略記する
def __call__(self, *args):
self.progress(args)
# 初期設定の記録用
def config(self, *args):
for arg in args:
print(arg, file=self.fp_config)
# 経過の記録、__call__から呼び出される
def progress(self, args):
for arg in args:
print(arg, file=self.fp_progress)
# 結果の記録用
def result(self, *args):
for arg in args:
print(arg, file=self.fp_result)
# フォルダ名の年月日時分秒取得
def get_datetime(self):
dt = datetime.datetime.now()
return str(dt.year) \
+ str(dt.month).zfill(2) \
+ str(dt.day).zfill(2) \
+ '_' \
+ str(dt.hour).zfill(2) \
+ str(dt.minute).zfill(2)
record = Record() # 記録用インスタンス
data1 = 1
data2 = np.array(1, 2, 3)
data3 = {'Hoge':1, 2:'Piyo', 3:'Fuga'}
# 初期設定の記録
record.config('data1 =', data1)
record.config('data2 =', data2,'data3 =', data3) # まとめて送ってもOK
# 繰り返し計算の過程の記録
data4 = data2
for i in range(10):
data4 = data4 + data2
record(data4)
# 結果の記録
record.result(data4)
del(record)